]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
system: Add an orientation lock action button
authorJasper St. Pierre <jstpierre@mecheye.net>
Wed, 17 Jul 2013 06:33:09 +0000 (02:33 -0400)
committerJasper St. Pierre <jstpierre@mecheye.net>
Tue, 13 Aug 2013 10:50:24 +0000 (06:50 -0400)
https://bugzilla.gnome.org/show_bug.cgi?id=705845

js/ui/status/system.js

index d1ec3e706db6383192c1c1f0fdbb8fef00882766..a4674c7f0459c08b7edf530ab1420f64f4bbc12a 100644 (file)
@@ -50,6 +50,7 @@ const Indicator = new Lang.Class({
         this._screenSaverSettings = new Gio.Settings({ schema: SCREENSAVER_SCHEMA });
         this._lockdownSettings = new Gio.Settings({ schema: LOCKDOWN_SCHEMA });
         this._privacySettings = new Gio.Settings({ schema: PRIVACY_SCHEMA });
+        this._orientationSettings = new Gio.Settings({ schema: 'org.gnome.settings-daemon.peripherals.touchscreen' });
 
         this._session = new GnomeSession.SessionManager();
         this._haveShutdown = true;
@@ -93,6 +94,21 @@ const Indicator = new Lang.Class({
         this._lockdownSettings.connect('changed::' + DISABLE_LOG_OUT_KEY,
                                        Lang.bind(this, this._updateHaveShutdown));
 
+        this._orientationSettings.connect('changed::orientation-lock',
+                                          Lang.bind(this, this._updateOrientationLock));
+        this._orientationExists = false;
+        Gio.DBus.session.watch_name('org.gnome.SettingsDaemon.Orientation',
+                                    Gio.BusNameWatcherFlags.NONE,
+                                    Lang.bind(this, function() {
+                                        this._orentationExists = true;
+                                        this._updateOrientationLock();
+                                    }),
+                                    Lang.bind(this, function() {
+                                        this._orentationExists = false;
+                                        this._updateOrientationLock();
+                                    }));
+        this._updateOrientationLock();
+
         Main.sessionMode.connect('updated', Lang.bind(this, this._sessionUpdated));
         this._sessionUpdated();
     },
@@ -150,6 +166,14 @@ const Indicator = new Lang.Class({
         }
     },
 
+    _updateOrientationLock: function() {
+        this._orientationLockAction.visible = this._orientationExists;
+
+        let locked = this._orientationSettings.get_boolean('orientation-lock');
+        let icon = this._orientationLockAction.child;
+        icon.icon_name = locked ? 'rotation-locked-symbolic' : 'rotation-allowed-symbolic';
+    },
+
     _updateLockScreen: function() {
         let showLock = !Main.sessionMode.isLocked && !Main.sessionMode.isGreeter;
         let allowLockScreen = !this._lockdownSettings.get_boolean(DISABLE_LOCK_SCREEN_KEY);
@@ -209,6 +233,10 @@ const Indicator = new Lang.Class({
         this._settingsAction.connect('clicked', Lang.bind(this, this._onSettingsClicked));
         hbox.add(this._settingsAction, { expand: true, x_fill: false });
 
+        this._orientationLockAction = this._createActionButton('', _("Orientation Lock"));
+        this._orientationLockAction.connect('clicked', Lang.bind(this, this._onOrientationLockClicked));
+        item.actor.add(this._orientationLockAction, { expand: true, x_fill: false });
+
         this._lockScreenAction = this._createActionButton('changes-prevent-symbolic', _("Lock"));
         this._lockScreenAction.connect('clicked', Lang.bind(this, this._onLockScreenClicked));
         hbox.add(this._lockScreenAction, { expand: true, x_fill: false });
@@ -231,6 +259,13 @@ const Indicator = new Lang.Class({
         app.activate();
     },
 
+    _onOrientationLockClicked: function() {
+        this.menu.itemActivated();
+        let locked = this._orientationSettings.get_boolean('orientation-lock');
+        this._orientationSettings.set_boolean('orientation-lock', !locked);
+        this._updateOrientationLock();
+    },
+
     _onLockScreenClicked: function() {
         this.menu.itemActivated(BoxPointer.PopupAnimation.NONE);
         Main.overview.hide();